package com.dy.design_pattern_study.agent_factory.dome1.impl;

import com.dy.design_pattern_study.agent_factory.dome1.IGiveGift;


/**
 * @Author zhangdingyi
 * @Date 2023-03-20 12:49
 * @Content 代理模式 为其他对象提供一种代理以控制对这个对象的访问  -简单的说就是间接访问
 */
public class Proxy implements IGiveGift {
    Pursuit pursuit;

    public Proxy(SchoolGirl mm) {
        this.pursuit = new Pursuit(mm);
    }

    @Override
    public void GiveDolls() {
        pursuit.GiveDolls();
    }

    @Override
    public void GiveFlowers() {
        pursuit.GiveFlowers();
    }

    @Override
    public void GiveChocolate() {
        pursuit.GiveChocolate();
    }

    public static void main(String[] args) {

        /*
         * 这里的思路应该是这样
         * Pursuit 是功能的主要拥有者
         * Proxy 是功能的代理者
         * SchoolGirl 这个是功能的对象
         * Pursuit 把对 SchoolGirl 的功能
         * 由 Proxy 代理，作用于 SchoolGirl
         */
        SchoolGirl jiaojiao = new SchoolGirl();
        jiaojiao.setName("李娇娇");

        //实际调用代理对象 -间接使用 Pursuit 的功能
        Proxy daili = new Proxy(jiaojiao);

        //实际作用于 SchoolGirl -娇娇不认识追求她的人，但却可以通过代理人得到礼物。效果其实是达到了。
        daili.GiveDolls();
        daili.GiveFlowers();
        daili.GiveChocolate();
    }

}